package yl.hs.bmipfull.service.flow;

import yl.hs.bmipfull.pojo.flow.FlowDataEntity;
import yl.hs.bmipfull.pojo.flow.FlowInfoEntity;
import yl.hs.bmipfull.service.IBaseService;
import yl.hs.bmipfull.viewmodels.PageQuery;
import yl.hs.bmipfull.viewmodels.PageResult;
import yl.hs.bmipfull.viewmodels.flow.FlowDataHandleViewModel;

import java.util.List;
import java.util.Map;

/**
 * 作用:  流程数据表服务层接口<br/>
 * 创建时间: 2021年06月23日 18时19分40秒 <br/>
 *
 * @author 张凯
 */

public interface IFlowDataService extends IBaseService {

    /**
     * 查询流程数据表信息
     *
     * @param pageQuery 查询条件 {@link PageQuery}
     * @return 流程数据表-List<{@link FlowDataEntity}>
     * @throws Exception 查询参数异常
     */
    List<FlowDataEntity> queryList(PageQuery pageQuery) throws Exception;

    /**
     * 查询流程数据表信息
     *
     * @param pageQuery 查询条件 {@link PageQuery}
     * @param rowNum    每页条数
     * @param page      页码
     * @return 站内信息-List-SiteMessageMainEntity
     * @throws Exception 查询条件异常
     */
    PageResult<FlowDataEntity> queryPage(PageQuery pageQuery, int rowNum, int page) throws Exception;


    /**
     * 根据流程数据表编号查询流程数据表信息
     *
     * @param sn 编号
     * @return 流程数据表-{@link FlowDataEntity}
     */
    FlowDataEntity findBySn(String sn);

    /**
     * 保存流程数据表信息
     *
     * @param model 流程数据表表单信息
     * @param sn    流程数据表信息原有编号
     * @return 执行结果-受影响行数-Integer
     * @throws Exception 保存异常
     */
    Integer saveFlowData(Map<String, Object> model, String sn) throws Exception;

    /**
     * 根据流程数据表编号删除流程数据表信息
     *
     * @param sn 流程数据表编号
     * @return 影响行数
     */
    Integer delete(String[] sn);

    /**
     * 用户处理数据流程操作
     *
     * @param dataHandle 用户处理数据
     * @return 执行结果
     * @throws Exception 操作时异常
     */
    Integer handle(FlowDataHandleViewModel dataHandle) throws Exception;

    /**
     * 开启流程
     *
     * @param flowInfo 流程信息
     * @param data     数据
     * @return 执行结果
     * @throws Exception 操作异常
     */
    Integer startFlow(FlowInfoEntity flowInfo, Object data) throws Exception;

    /**
     * 根据状态修改状态
     *
     * @param setState
     * @param whereState
     * @return
     */
    Integer updateStateByState(short setState, short whereState);

    /**
     *  根据编号修改状态
     * @param table 表名
     * @param state 状态
     * @param sn 编号
     * @return 行数
     */
    int closeDateTask(String table,short state, String sn);
}